package md.NJavaBase;

import android.util.Log;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;

//视频广告管理器
public class AdMgr  {

    //允许并行加载的Loader数量
    final int MAX_RUNING = 2;

    final String Tag;

    public AdMgr(String tag )
    {
        Tag = tag;
    }

    //注册一个广告
    public void RegAD(IAd ad)
    {
        AdLoader loader = new AdLoader(ad,Tag+"Loader" );
        mLoaderList.RegAD(loader);
    }

    //在所有广告注册完毕后，管理器可以开始工作了
    public  void go(IAdLoaderCallback callback)
    {
        m_callback = callback;

        //if(mLoaderList.size()<1) return;//没有任何广告可用

        //立即预装一个视频
        autoStartLoader();

        //开启主循环
        MainLoop.StartLoop(new ILoop() {
            @Override
            public boolean Do() {
                //自动补充后台预装的视频
                autoStartLoader();

                return true;
            }
        });
    }

    public void show(int channel)
    {
        AdLoader loader =(AdLoader) mLoaderList.getLoader(AdState.Ready);//获取一个已经加载完成的loader
        if(loader==null)//没有装载成功
        {
            Log.d(Tag,"ShowAd_None");
           // NJavaBase.trackEvent("ShowAd_None");
            m_callback.onError("NotLoaded");
            return;
        }

        if(loader.isInvalidated())//视频已过期
        {
            Log.d(Tag,"ShowAd_None2");
         //   NJavaBase.trackEvent("ShowAd_None2");
            m_callback.onError("Invalidated");
            return;
        }

        //String evtName = String.format("ShowAd_%s%d",loader.getAD().adName(),channel);
        //Log.d(Tag,evtName);

        //Map<String,Object> param = new HashMap<>();
        //param.put("channel",channel);

        //成功弹出视频打点
        //NJavaBase.trackEvent(evtName);

        //显示视频
        loader.show(channel);
    }

    //自动启动loader
    void autoStartLoader()
    {
        long now = System.currentTimeMillis();

        //统计装载不超过20秒的数量
        //如果一个装载超过了20秒，则可以另外启动其它的loader
        int count = 0;
        for(int i=0;i<mLoaderList.size();i++)
        {
            AdLoader curr = (AdLoader)mLoaderList.get(i);
            if(curr.getState()== AdState.Loading&& now - curr.getStartLoadTime()<20000)
                count++;
        }

        if(count>=MAX_RUNING) {
            Log.d(Tag,"加载中的Loader达到上限");
            return;//目前运行中的loader已经达到了限制
        }

        AdLoader idleLoader = (AdLoader)mLoaderList.getLoader(AdState.None);//获取一个处于空闲状态的loader
        if(idleLoader==null) {
            Log.d(Tag,"没有找到空闲状态的loader");
            return;//没有找到处于空闲状态的loader
        }
        //当前Loader指向下一个
        int idx = mLoaderList.getLoaderIdx(idleLoader);
        mLoaderList.moveIdx(idx);

        Log.d(Tag,"启动loader");

        //启动loader
        idleLoader.reLoad(m_callback);
    }



    IAdLoaderCallback m_callback;
    LoaderList mLoaderList = new LoaderList();

}
